#include<iostream>
using namespace std;
/*
继承是面向对象三大特性之一
有些类与类之间存在特殊的关系
动物:{猫:{加菲猫,布偶猫,波斯猫},狗:{哈士奇,京巴,牧羊犬}}

发现定义这些类时，下级别的成员除了拥有上一级的共性，还有自己的特性
这个时候就可以考虑利用继承的技术，减少重复代码

继承的基本语法：
    例如看到很多网站中，都有公共的头部，公共的底部，甚至公共的左侧列表，只有中心内容不同
    接下来分别用利用普通写法和继承的写法来实现网页中的内容，看一下继承存在的意义以及好处

继承的好处：减少重复代码
语法：class 子类 : 继承方式 父类
子类也称为派生类
父类也称为基类

派生类中的成员，包含两大部分：
一类是从基类继承过来的，一类是自己增加的成员
从基类继承过来的表现其共性，而新增的成员体现了其个性
*/
//普通实现
// class Java
// {
// public:
//     void header()
//     {
//         cout<<"首页、公开课、登录、注册...（公共头部）"<<endl;
//     }
//     void footer()
//     {
//         cout<<"帮助中心、交流合作、站内地图...（公共底部）"<<endl;
//     }
//     void left()
//     {
//         cout<<"Java、Python、C++...（公共分类列表）"<<endl;
//     }
//     void content()
//     {
//         cout<<"Java学科视频"<<endl;
//     }
// };
//继承
class BasePage
{
public:
    void header()
    {
        cout<<"首页、公开课、登录、注册...（公共头部）"<<endl;
    }
    void footer()
    {
        cout<<"帮助中心、交流合作、站内地图...（公共底部）"<<endl;
    }
    void left()
    {
        cout<<"Java、Python、C++...（公共分类列表）"<<endl;
    }   
};
//Java页面
class Java:public BasePage
{
public:
    void content()
    {
        cout<<"Java学科视频"<<endl;
    }
};
//Python页面
class Python:public BasePage
{
public:
    void content()
    {
        cout<<"Python学科视频"<<endl;
    }
};
//C++页面
class Cpp:public BasePage
{
public:
    void content()
    {
        cout<<"C++学科视频"<<endl;
    }
};
void test01()
{
    //java页面
    cout<<"java学习视频页面"<<endl;
    Java ja;
    ja.header();
    ja.footer();
    ja.left();
    ja.content();

    cout<<"Python学习视频页面"<<endl;
    Python py;
    py.header();
    py.footer();
    py.left();
    py.content();

    cout<<"C++学习视频页面"<<endl;
    Cpp cp;
    cp.header();
    cp.footer();
    cp.left();
    cp.content();
}
int main()
{
    test01();
}